﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MJM.SPP.EntidadesNegocio;
using MJM.Principal;
using MJM.RPP.EntidadesNegocio;
using System.Data;

namespace wRegPadron.frmOpciones
{
    public partial class ucGeneradorCodigo : System.Web.UI.UserControl
    {
        public static List<int> lstA = new List<int>();
        public static List<int> lstB = new List<int>();
        public static List<int> lstC = new List<int>();
        public static List<int> lstD = new List<int>();
        public static List<int> lstE = new List<int>();
        public static List<int> lstF = new List<int>();
        public static List<int> lstG = new List<int>();
        public static List<int> lstH = new List<int>();
        public static List<int> lstI = new List<int>();
        public static List<int> lstJ = new List<int>();
        protected static Random Numero = new Random(DateTime.Now.Millisecond);
        protected static Random Columna = new Random(DateTime.Now.Millisecond);
        protected static List<PersonaE> lstPersonaE=new List<PersonaE>();
        protected static string idPersonaSelect="";
        protected static string Usuario = "";
        protected static List<ColumCodigoEN> lstColumCodigoEN = new List<ColumCodigoEN>();
        protected static List<AsignacionTarEN> lstAsignacionTarEN = new List<AsignacionTarEN>();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuGeneradorMatriz");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
                //objColumCodigoCN.MatrizxCodigo("20120001");
                lstAsignacionTarEN = MediadorCN.GetAsignacionTar().ListarTodos();
             /*   gvCodigos.DataSource = lstAsignacionTarEN;
                gvCodigos.DataBind();*/
                string max = MediadorCN.GetAsignacionTar().CantidadTarjetas().ToString();
                while (max.Length < 4)
                    max = "0" + max;
                txtNroInicio.Text = DateTime.Now.Year.ToString() + "0001";
                txtNroFin.Text = DateTime.Now.Year.ToString() + max;
                Asignacion.Visible = false;
            }
        }

        protected void CargarListas()
        {
            lstA.Clear();
            lstB.Clear();
            lstC.Clear();
            lstD.Clear();
            lstE.Clear();
            lstF.Clear();
            lstG.Clear();
            lstH.Clear();
            lstI.Clear();

            for (int i = 1; i < 1000; i++)
            {
                lstA.Add(1000 + i);
                lstB.Add(2000 + i);
                lstC.Add(3000 + i);
                lstD.Add(4000 + i);
                lstE.Add(5000 + i);
                lstF.Add(6000 + i);
                lstG.Add(7000 + i);
                lstH.Add(8000 + i);
                lstI.Add(9000 + i);
            }
        }

        protected int ObtenerNumero()
        {
            int colum = Columna.Next(0, 8);            
            int num = 0,pos=0;
            
            switch (colum)
            {
                case 0:
                    {
                        pos = Numero.Next(0, lstA.Count - 1);
                        num = lstA[pos];
                        lstA.RemoveAt(pos);
                    }; break;
                case 1:
                    {
                        pos = Numero.Next(0, lstB.Count - 1);
                        num = lstB[pos];
                        lstB.RemoveAt(pos);
                    }; break;
                case 2:
                    {
                        pos = Numero.Next(0, lstC.Count - 1);
                        num = lstC[pos];
                        lstC.RemoveAt(pos);
                    }; break;
                case 3:
                    {
                        pos = Numero.Next(0, lstD.Count - 1);
                        num = lstD[pos];
                        lstD.RemoveAt(pos);
                    }; break;
                case 4:
                    {
                        pos = Numero.Next(0, lstE.Count - 1);
                        num = lstE[pos];
                        lstE.RemoveAt(pos);
                    }; break;
                case 5:
                    {
                        pos = Numero.Next(0, lstF.Count - 1);
                        num = lstF[pos];
                        lstF.RemoveAt(pos);
                    }; break;
                case 6:
                    {
                        pos = Numero.Next(0, lstG.Count - 1);
                        num = lstG[pos];
                        lstG.RemoveAt(pos);
                    }; break;
                case 7:
                    {
                        pos = Numero.Next(0, lstH.Count - 1);
                        num = lstH[pos];
                        lstH.RemoveAt(pos);
                    }; break;
                case 8:
                    {
                        pos = Numero.Next(0, lstI.Count - 1);
                        num = lstI[pos];
                        lstI.RemoveAt(pos);
                    }; break;
            }

            return num;
        }

        protected ColumCodigoEN ObtenerColumna(int ID)
        {
            ColumCodigoEN objColumCodigoEN = new ColumCodigoEN();
            string mes="", dia="";
            if (DateTime.Now.Month < 10)
                mes = "0" + DateTime.Now.Month.ToString();
            else
                mes = DateTime.Now.Month.ToString();

            if (DateTime.Now.Day < 10)
                dia = "0" + DateTime.Now.Day.ToString();
            else
                dia = DateTime.Now.Day.ToString();

            objColumCodigoEN.CODCOL_chFECREG = DateTime.Now.Year.ToString()+mes+dia;
            objColumCodigoEN.ASITAR_P_inID = ID;
            int num;
            for (int i = 0; i < 10; i++)
            {
                num = ObtenerNumero();
                if (i == 0)
                    objColumCodigoEN.CODCOL_inCOLA = num;
                if (i == 1)
                    objColumCodigoEN.CODCOL_inCOLB = num;
                if (i == 2)
                    objColumCodigoEN.CODCOL_inCOLC = num;
                if (i == 3)
                    objColumCodigoEN.CODCOL_inCOLD = num;
                if (i == 4)
                    objColumCodigoEN.CODCOL_inCOLE = num;
                if (i == 5)
                    objColumCodigoEN.CODCOL_inCOLF = num;
                if (i == 6)
                    objColumCodigoEN.CODCOL_inCOLG = num;
                if (i == 7)
                    objColumCodigoEN.CODCOL_inCOLH = num;
                if (i == 8)
                    objColumCodigoEN.CODCOL_inCOLI = num;
                if (i == 9)
                    objColumCodigoEN.CODCOL_inCOLJ = num;

            }
            return objColumCodigoEN;
        }

        protected List<ColumCodigoEN> ObtenerMatriz(int ID)
        {
            CargarListas();
            List<ColumCodigoEN> lst = new List<ColumCodigoEN>();
            for (int i = 0; i < 10; i++)
            {
                lst.Add(ObtenerColumna(ID));
            }
            return lst;
        }

        protected void btnBuscarPersona_Click(object sender, EventArgs e)
        {
            lblErrorAsignacion.Text = "";
            lblMensajeGen.Text = "";
            lstColumCodigoEN.Clear();
            if (txtApellidoMaterno.Text != "" || txtApellidoPaterno.Text != "" || txtNroDocumento.Text != "")
            {
                lstPersonaE = MediadorCN.GetPersona().Listar(1, txtNroDocumento.Text, txtApellidoPaterno.Text, txtApellidoMaterno.Text);

                if (lstPersonaE.Count > 0)
                {
                    gvUsuarios.DataSource = lstPersonaE;
                    gvUsuarios.DataBind();
                    lblErrorBusq.Text = "";                   
                }
                else
                {
                    lblErrorBusq.Text = "No se econtraron usuarios.";                   
                }
            }
            else
            {
                lblErrorBusq.Text = "Ingrese los datos solicitados.";                
            }
        }

        protected void gvUsuarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvUsuarios.PageIndex = e.NewPageIndex;
            gvUsuarios.DataSource = lstPersonaE;
            gvUsuarios.DataBind();
        }

        protected void gvUsuarios_Seleccionar(object sender, GridViewCommandEventArgs e)
        {
            string idpersona;
            lstColumCodigoEN.Clear();
            int index = -1;
            index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvUsuarios.Rows[index];
            idpersona = Server.HtmlDecode(row.Cells[0].Text).ToString();
            idPersonaSelect = idpersona;
            Usuario = MediadorCN.GetUsuario().Obtener(idPersonaSelect).Usuario;
            if (e.CommandName == "Asignar")
            {
                if (!MediadorCN.GetAsignacionTar().EncuentraUsuario(Usuario))
                {
                    lblUsuario.Text = Usuario;
                    Asignacion.Visible = true;
                    lblErrorAsignacion.Text = "";
                }
                else
                {
                    lblErrorAsignacion.Text = "El usuario seleccionado ya tiene una tarjeta asignada";
                   // lstColumCodigoEN = objColumCodigoCN.ObtenerCodigos(Usuario);           
                }
            }
            else if (e.CommandName == "Cancelar")
            {
                AsignacionTarEN obj = MediadorCN.GetAsignacionTar().Obtener(Usuario);
                if (obj != null)
                {
                    int result = MediadorCN.GetAsignacionTar().Eliminar(obj.ASITAR_P_inID);
                    if (result > 0)
                    {
                        lstColumCodigoEN.Clear();
                        lblErrorAsignacion.Text = "La tarjeta fue cancelada correctamente.";                        
                    }
                    else
                    {
                        lstColumCodigoEN.Clear();
                        lblErrorAsignacion.Text = "La tarjeta no pudo ser cancelada";
                    }
                }
                else
                {
                    lblErrorAsignacion.Text = "Al usuario seleccionado no se le ha asignado ninguna tarjeta";
                }
            }
        }
        
        protected void btnGenerar_Click(object sender, EventArgs e)
        {
            int cont = 0;
            if (txtCantidad.Text != "")
            {
                int cantidad = Convert.ToInt32(txtCantidad.Text);
                List<ColumCodigoEN> lst2;
                AsignacionTarEN objAsignacionTarEN;
                string mes = "", dia = "";
                if (DateTime.Now.Month < 10)
                    mes = "0" + DateTime.Now.Month.ToString();
                else
                    mes = DateTime.Now.Month.ToString();

                if (DateTime.Now.Day < 10)
                    dia = "0" + DateTime.Now.Day.ToString();
                else
                    dia = DateTime.Now.Day.ToString();
                while (cont < cantidad)
                {
                    objAsignacionTarEN = new AsignacionTarEN();
                    objAsignacionTarEN.USUPAD_P_chUSU = "";
                    objAsignacionTarEN.ASITAR_chUSUCRE = Session["Usuario"].ToString();
                    objAsignacionTarEN.ASITAR_chFECREG = DateTime.Now.Year.ToString() + mes + dia;
                    int codigo = MediadorCN.GetAsignacionTar().Insertar(objAsignacionTarEN);
                    lst2 = ObtenerMatriz(codigo);
                    for (int j = 0; j < 10; j++)
                    {
                        MediadorCN.GetColumCodigo().Insertar(lst2[j]);
                    }
                    cont++;
                }
                lblMensajeGen.Text = "Se generaron " + cont.ToString() + " tarjetas";
                txtCantidad.Text = "";
                List<AsignacionTarEN> lstAux = MediadorCN.GetAsignacionTar().ListarTodos();
                lstAsignacionTarEN = lstAux;
                List<String> codigos = new List<String>();
                string dato;
                for (int i = 0; i < lstAux.Count; i++)
                {
                    dato=lstAux[i].ASITAR_chCODTAR;
                    codigos.Add(dato);
                }               

            }
            else
            {
                lblMensajeGen.Text = "Ingrese la cantidad de tarjetas";
                txtCantidad.Text = "";
            }
        }

        protected void ibtnMostrar_Click(object sender, EventArgs e)
        {            
            ImpresionEN objImpresionEN = new ImpresionEN();
            objImpresionEN.TARIMP_chUSUREG = Session["Usuario"].ToString();
            objImpresionEN.TARIMP_inRANFIN = Convert.ToInt32(txtNroFin.Text);
            objImpresionEN.TARIMP_inRANINI = Convert.ToInt32(txtNroInicio.Text);
            if (objImpresionEN.TARIMP_inRANFIN > objImpresionEN.TARIMP_inRANINI)
            {
                int codigo = MediadorCN.GetImpresion().Insertar(objImpresionEN);                
              //  int codigo = 2;
                if (codigo > 0)
                {
                    if (cbMostrarAsignados.Checked)
                        Session.Add("FlagAsignado", 1);
                    else
                        Session.Add("FlagAsignado", 0);
                    Session.Add("CodImpresion",codigo);
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    sb.Append(@"<script language='javascript'>");
                    sb.Append(@"window.open('frmReporte.aspx','Tarjeta','toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no,resizable=0,width=700,height=650,left = 0,top = 0');");
                    //  sb.Append(@"window.open('frmReporte.aspx','Tarjeta','toolbar=no,scrollbars=yes,location=no,statusbar=no,menubar=no,resizable=0,width=900,height=900,left = 0,top = 0');");
                    sb.Append(@"</script>");
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "Tarjeta", sb.ToString(), false);
                }
                else
                {

                }
            }
        }

        protected void btnRegistrarAsignacion_Click(object sender, EventArgs e)
        {
            bool esnumero=true;            
            try
            {
                int num = Convert.ToInt32(txtTiempo.Text);
            }
            catch
            {
                esnumero = false;
            }
            if (MediadorCN.GetAsignacionTar().ValidarNroTarjeta(txtCodigoTar.Text))
            {
                if (esnumero)
                {
                    string mes = "", dia = "";
                    if (DateTime.Now.Month < 10)
                        mes = "0" + DateTime.Now.Month.ToString();
                    else
                        mes = DateTime.Now.Month.ToString();

                    if (DateTime.Now.Day < 10)
                        dia = "0" + DateTime.Now.Day.ToString();
                    else
                        dia = DateTime.Now.Day.ToString();

                    string fecha = DateTime.Now.Year.ToString() + mes + dia;
                    int dias = 0;
                    if (Convert.ToInt32(ddlTiempo.SelectedValue) == 1)
                        dias = Convert.ToInt32(txtTiempo.Text);
                    else if (Convert.ToInt32(ddlTiempo.SelectedValue) == 2)
                        dias = Convert.ToInt32(txtTiempo.Text) * 7;
                    else if (Convert.ToInt32(ddlTiempo.SelectedValue) == 3)
                        dias = Convert.ToInt32(txtTiempo.Text) * 30;
                    else if (Convert.ToInt32(ddlTiempo.SelectedValue) == 4)
                        dias = Convert.ToInt32(txtTiempo.Text) * 365;
                    DateTime venc = DateTime.Now.AddDays(dias);
                    string fecven = "";
                    if (venc.Date.Day < 10)
                        dia = "0" + venc.Date.Day.ToString();
                    else
                        dia = venc.Date.Day.ToString();

                    if (venc.Date.Month < 10)
                        mes = "0" + venc.Date.Month.ToString();
                    else
                        mes = venc.Date.Month.ToString();
                    fecven = venc.Date.Year.ToString() + mes + dia;
                    int codigo = MediadorCN.GetAsignacionTar().AsignarTarjeta(lblUsuario.Text, txtCodigoTar.Text, fecven, Session["Usuario"].ToString(), fecha);
                    if (codigo > 0)
                    {
                        lblErrorAsignacion.Text = "La asignación se realizó satisfactoriamente";
                        txtTiempo.Text = "";
                        ddlTiempo.SelectedIndex = 0;

                        Asignacion.Visible = false;
                    }
                    else
                    {
                        lblErrorAsignacion.Text = "No se pudo realizar la asignación";
                    }
                }
                else
                {
                    lblErrorAsignacion.Text = "Ingrese el tiempo de caducidad";
                }
            }
            else
            {
                lblErrorAsignacion.Text = "La tarjeta ingresada no está disponible";
            }
        }
    }
}